iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
SideProject30

從零開始的外匯自動程式交易系列 第 8

DAY8 MQL5的前置處理指示詞

  • 分享至 

  • xImage
  •  

何謂前置處理指示詞

前置處理指示詞(Preprocessor Directives)是在MQL5程式語言中用於控制編譯過程的特殊指令。它們以#字符開始,並且在實際編譯程式碼之前進行處理。這些指示詞提供了一種方便的方式,可以在編譯時對程式碼進行條件編譯、文件包含、符號定義等操作。接下來就來說明他們的用法與範例。

1. 屬性(Property)

#property指令通常用於定義程式屬性,像是描述性資訊、腳本、文檔庫...。而這些屬性則會在EA屬性對話方塊的「普通」中顯示。
這個指令通常放在程式的最頂端。

範例

 #property copyright "Copyright 2023, SHINICHICKEN."
 #property link      "https://shinichicken.com"
 #property version   "1.00"
 #property description "My test EA"

產生效果如圖:https://ithelp.ithome.com.tw/upload/images/20230923/20163114eQODE7o0Ji.png

2.定義(define)

(一) #define
指令用於定義常量或巨集,習慣上會使用全部大寫字母作為識別字名稱。

範例

#define PI 3.1415926535926  // 定義圓周率的數值常量
#define LOT_SIZE 0.01     // 定義交易手數的數值常量
#define WELCOME_MESSAGE "歡迎來到交易平台"  // 定義歡迎消息

他還有一個變式稱為參數形式,可以定義函數運算之類的。

範例

#define SQUARE(x) (x * x)  // 定義計算平方
#define SWAP(a, b) {double tmp = a; a = b; b = tmp;}  // 定義變數交換

//使用定義函數:

double area = SQUARE(5.0);  // 結果將是 25.0

double m = 5.0;
double n = 10.0;
SWAP(m, n);  // 現在 m 的值是 10.0,n 的值是 5.0

(二) #ifdef
用於檢查指定的標識符是否已經被定義。如果標識符已經被定義,則執行相關的代碼塊;否則,可以執行另一個代碼塊或者忽略這部分代碼。這對於在不同的編譯條件下啟用或禁用特定代碼塊非常有用。

範例

#define DEBUG_MODE  // 定義調試模式

#ifdef DEBUG_MODE
   // 在調試模式下執行的代碼
   Print("這是調試消息");
#else
   // 在正常模式下執行的代碼
   Print("這是正常消息");
#endif

3.包含(include)

#include用於在源文件中導入外部文件,通常是頭文件(header files)或其他源文件。這使得在一個源文件中可以使用其他文件中定義的內容,這樣可以實現代碼的模組化和可重用性。
這個指令有兩種變式,分別為
#include <123.mqh>,#include"123.mqh"
前者會尋找 MT5資料夾/MQL5/include 子資料夾的檔案,通常這些檔案包含了函數聲明、類定義、常量等信息。
而後者只會查找與程式檔在相同目錄的檔案。通常用來導入自定義文件,這有助於將代碼拆分為多個文件,使其更具組織性和可維護性。

4.匯入(import)

#import用於將外部動態連結庫(DLL)中的功能引入到MQL5代碼中。使我們可以使用外部庫中的函數,擴展MQL5的功能,並與其他程式語言進行交互。

範例

#import "MyLibrary.dll"
int MyFunction(int parameter1, double parameter2);
void AnotherFunction();
#import

5. pragma

用於設置特定編譯選項或控制編譯過程的指令。在MQL5中,#pragma 用於控制編譯器的行為,以確保代碼以特定的方式進行編譯。

範例

#pragma once //避免重複包含
#pragma strict //啟用嚴格模式
#pragma warning(disable: 4018) //控制編譯器警告的輸出(即禁用4018警告的輸出)
#pragma optimize(3) //控制代碼的優化級別

今天就分享到這邊啦,連上六天班的各位都辛苦了,這次就早點發文,大家也早點休息,畢竟只休一天又要上班上課了。
/images/emoticon/emoticon08.gif


上一篇
DAY7 更多的事件處理器介紹
下一篇
DAY9 MQL5的資料類型與應用
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言